package com.panfeng.xcloud.boss.provider.member.dao.mapper;

import com.panfeng.xcloud.boss.provider.member.dto.UserInviterExtendItemDTO;
import com.panfeng.xcloud.boss.provider.member.dto.request.GetFamilyTreeInfoListPageReqDTO;
import com.panfeng.xcloud.boss.provider.member.dto.request.QueryUserInviterPageReqDTO;
import com.panfeng.xcloud.boss.provider.member.dto.request.RebateListReqDTO;
import com.panfeng.xcloud.boss.provider.member.dto.request.UserInviterPageReqDTO;
import com.panfeng.xcloud.boss.provider.member.dto.response.*;
import com.panfeng.xcloud.dao.member.entity.UserInviter;
import com.panfeng.xcloud.dao.member.mapper.UserInviterMapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface UserInviterMapperExt extends UserInviterMapper {

    List<GetFamilyTreeInfoListRespDTO> getFamilyTreeInfoListPage(GetFamilyTreeInfoListPageReqDTO getFamilyTreeInfoListPageReqDTO);

    Long queryInviteSecondLevel2PageCount(UserInviterPageReqDTO userInviterPageReqDTO);

    List<UserInviterItemDTO> queryInviteSecondLevel2Page(UserInviterPageReqDTO userInviterPageReqDTO);

    Long queryAllInviteSecondLevelPageCount(UserInviterPageReqDTO userInviterPageReqDTO);

    List<UserInviterItemDTO> queryAllInviteSecondLevelPage(UserInviterPageReqDTO userInviterPageReqDTO);

    Long querySecondLevelRebateListPageCount(RebateListReqDTO rebateListReqDTO);

    List<RebateListPageRespDTO> querySecondLevelRebateListPage(RebateListReqDTO rebateListReqDTO);

    Long queryFirstLevelRebateListPageCount(RebateListReqDTO rebateListReqDTO);

    List<RebateListPageRespDTO> queryFirstLevelRebateListPage(RebateListReqDTO rebateListReqDTO);

    Long queryAllRebateListPageCount(RebateListReqDTO rebateListReqDTO);

    List<RebateListPageRespDTO> queryAllRebateListPage(RebateListReqDTO rebateListReqDTO);

    /**
     * 查询返利
     *
     * @param userId
     * @return
     */
    RebateTaskStatisticsRespDTO queryRebateByType(@Param("userId")String userId, @Param("type")Integer type, @Param("returnLevel")Integer returnLevel);

    /**
     * 一级邀请人数
     *
     * @param userId
     * @return
     */
    UserInviterItemDTO queryInviteOneLevelCount(@Param("userId")String userId, @Param("reward")BigDecimal reward);

    /**
     * 二级邀请人数
     *
     * @param userId
     * @return
     */
    UserInviterItemDTO queryInviteSecondLevelCount(@Param("userId")String userId, @Param("reward")BigDecimal reward);

    /**
     * 获取二级推荐
     *
     * @param userId
     * @return
     */
    List<UserInviterItemDTO> queryInviteSecondLevel(@Param("userId")String userId, @Param("inviterUserId")String inviterUserId);

    Long queryInviteOneLevelPageCount(UserInviterPageReqDTO userInviterPageReqDTO);

    List<UserInviterItemDTO> queryInviteOneLevelPage(UserInviterPageReqDTO userInviterPageReqDTO);

    UserInviter queryParentInviter(String userId);

    long queryAllProfitRebateListPageCount(RebateListReqDTO rebateListReqDTO);

    List<ProfitRebateListPageRespDTO> queryAllProfitRebateListPage(RebateListReqDTO rebateListReqDTO);

    long queryProfitFirstLevelRebateListPageCount(RebateListReqDTO rebateListReqDTO);

    List<ProfitRebateListPageRespDTO> queryProfitFirstLevelRebateListPage(RebateListReqDTO rebateListReqDTO);

    long queryProfitSecondLevelRebateListPageCount(RebateListReqDTO rebateListReqDTO);

    List<ProfitRebateListPageRespDTO> queryProfitSecondLevelRebateListPage(RebateListReqDTO rebateListReqDTO);

    List<UserInviter> selectOneLevelFriendByUserId(String userId);

    int updateAddReleaseFrozenXDCByUserId(@Param("userId") String userId, @Param("amount") BigDecimal amount);

    BigDecimal findFrozenAssetByUserId(String userId);

    Integer queryUserWalletCurrencyIdByUserId(String userId);

    int updateAddReleaseFrozenXDCByWalletCurrencyId(@Param("id")Integer id, @Param("amount")BigDecimal amount);

    /**
     * 查询社区所有成员userId集合
     * @param    userId 用户
     * @return   该用户所在团队所有成员userId集合
     */
    List<String> listCommunityUserId(@Param("userId") String userId);

    /**
     * 查询一个用户所有直推人ID集合
     * @param userId
     * @return
     */
    List<String> listAllInviterUserIdByUserId(@Param("userId") String userId);

    /**
     * 查询一个userId集合里激活个数
     * @param userIdList  所有团队成员id
     *
     */
    Integer countAliveInviter(List<String> userIdList);

    /**
     * 查询一个userId集合,今日总盈利和总盈利
     * @param userIdList
     * @return
     */
    Map<String, BigDecimal> sumTodayProfitAndTotalProfit(List<String> userIdList);

    Long queryUserInviterExtPageCount(QueryUserInviterPageReqDTO queryUserInviterPageReqDTO);

    List<UserInviterExtendItemDTO> queryUserInviterExtPage(QueryUserInviterPageReqDTO queryUserInviterPageReqDTO);

}